当存在多个参数时,如何在 clean url 中仅保持最后一个参数动态
How to keep only last parameter dynamic in clean url when multiple parameters present
当我有超过 1 个参数时,如何使 url 的最后一个参数动态化
例如:http://localhost:8080/series/dynamics/testurl/Shoes/Sports
有 2 个参数,即 "shoes" 和 "Sports"。我想要实现的是将 Shoes 作为静态参数,将 "Sports" 作为动态参数,可以进一步更改为 "Running"、"Tennis" 或 "Casual"。下面是我在 php:
中定义 links 的方式
<a href="<?php echo 'Shoes'.'/'.$var2; ?>">Sports</a><br/>
<a href="<?php echo 'Shoes'.'/'.$var2; ?>">Running</a><br/>
<a href="<?php echo 'Shoes'.'/'.$var3; ?>">Tennis</a><br/>
<a href="<?php echo 'Shoes'.'/'.$var4; ?>">Casual</a><br/>
虽然试图通过上面的代码和 htaccess 实现它,但我的问题是一旦用户在 "Sports" 上点击网球,url 就会更改为以下内容:
http://localhost:8080/series/dynamics/testurl/Shoes/Shoes/Tennis
或者即使当我第二次点击体育 link 它变成:
http://localhost:8080/series/dynamics/testurl/Shoes/Shoes/Sports
结果我收到 404 Not found 错误。因此,我希望必须有办法让第一个参数保持静态,只有第二个参数保持动态。我知道这不是一种非常经典的做事方式,但为了能够缩小我的错误范围,我已经进入了初级水平,但还没有运气!!!
我检查了各种来源,但都无法解决我的问题。请指导我正确的方向。
.htaccess 看起来像这样:
RewriteEngine On
RewriteBase /series/dynamics/testurl/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]+)/?$ test.php?page= [L,NC,QSA]
RewriteRule ^([a-zA-Z]+)/([^/]+)/?$ test.php?page=&subgroup= [L,NC,QSA]
我认为这可能没问题
RewriteEngine On
RewriteBase /series/dynamics/testurl/
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)(/?)$ test.php?page=&subgroup= [L,NC]
啊是的,愚蠢的我。如果您需要将 /series/dynamics/testurl/
保留在 url 中,那么重写路径应该只是 /
这意味着您的 url 将这样写:http://localhost/series/dynamics/testurl/Shoes/Tennis
否则,如果你想要 url 像 http://localhost/Shoes/Tennis
那么你将使用最初指定的完整重写路径 ~ 即:/series/dynamics/testurl/
所以,总结一下:
RewriteEngine On
RewriteBase /series/dynamics/testurl/
RewriteRule ^([a-zA-Z0-9\.\-\_]+)/([a-zA-Z0-9\.\-\_]+)(/?)$ test.php?page=&subgroup= [L,NC]
# write your url like this: `http://localhost/Shoes/Tennis`
# Or
RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z0-9\.\-\_]+)/([a-zA-Z0-9\.\-\_]+)(/?)$ test.php?page=&subgroup= [L,NC]
# write your urls like this: `http://localhost/series/dynamics/testurl/Shoes/Tennis`
作为这里的测试,我做了 https://localhost/boots/rock-climbing
,当打印出 $_GET
变量时,产生了:
Array ( [page] => boots [subgroup] => rock-climbing )
看来您需要在 HTML 中使用 <base>
标签来处理相对 URLs。
您可以在页面 HTML 的 <head>
部分下方添加此内容:
<base href="/series/dynamics/testurl/" />
这样每个 亲戚 URL 都是从那个基础 URL 解析的,而不是从当前页面的 URL.
当我有超过 1 个参数时,如何使 url 的最后一个参数动态化
例如:http://localhost:8080/series/dynamics/testurl/Shoes/Sports
有 2 个参数,即 "shoes" 和 "Sports"。我想要实现的是将 Shoes 作为静态参数,将 "Sports" 作为动态参数,可以进一步更改为 "Running"、"Tennis" 或 "Casual"。下面是我在 php:
中定义 links 的方式<a href="<?php echo 'Shoes'.'/'.$var2; ?>">Sports</a><br/>
<a href="<?php echo 'Shoes'.'/'.$var2; ?>">Running</a><br/>
<a href="<?php echo 'Shoes'.'/'.$var3; ?>">Tennis</a><br/>
<a href="<?php echo 'Shoes'.'/'.$var4; ?>">Casual</a><br/>
虽然试图通过上面的代码和 htaccess 实现它,但我的问题是一旦用户在 "Sports" 上点击网球,url 就会更改为以下内容:
http://localhost:8080/series/dynamics/testurl/Shoes/Shoes/Tennis
或者即使当我第二次点击体育 link 它变成:
http://localhost:8080/series/dynamics/testurl/Shoes/Shoes/Sports
结果我收到 404 Not found 错误。因此,我希望必须有办法让第一个参数保持静态,只有第二个参数保持动态。我知道这不是一种非常经典的做事方式,但为了能够缩小我的错误范围,我已经进入了初级水平,但还没有运气!!!
我检查了各种来源,但都无法解决我的问题。请指导我正确的方向。
.htaccess 看起来像这样:
RewriteEngine On
RewriteBase /series/dynamics/testurl/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]+)/?$ test.php?page= [L,NC,QSA]
RewriteRule ^([a-zA-Z]+)/([^/]+)/?$ test.php?page=&subgroup= [L,NC,QSA]
我认为这可能没问题
RewriteEngine On
RewriteBase /series/dynamics/testurl/
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)(/?)$ test.php?page=&subgroup= [L,NC]
啊是的,愚蠢的我。如果您需要将 /series/dynamics/testurl/
保留在 url 中,那么重写路径应该只是 /
这意味着您的 url 将这样写:http://localhost/series/dynamics/testurl/Shoes/Tennis
否则,如果你想要 url 像 http://localhost/Shoes/Tennis
那么你将使用最初指定的完整重写路径 ~ 即:/series/dynamics/testurl/
所以,总结一下:
RewriteEngine On
RewriteBase /series/dynamics/testurl/
RewriteRule ^([a-zA-Z0-9\.\-\_]+)/([a-zA-Z0-9\.\-\_]+)(/?)$ test.php?page=&subgroup= [L,NC]
# write your url like this: `http://localhost/Shoes/Tennis`
# Or
RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z0-9\.\-\_]+)/([a-zA-Z0-9\.\-\_]+)(/?)$ test.php?page=&subgroup= [L,NC]
# write your urls like this: `http://localhost/series/dynamics/testurl/Shoes/Tennis`
作为这里的测试,我做了 https://localhost/boots/rock-climbing
,当打印出 $_GET
变量时,产生了:
Array ( [page] => boots [subgroup] => rock-climbing )
看来您需要在 HTML 中使用 <base>
标签来处理相对 URLs。
您可以在页面 HTML 的 <head>
部分下方添加此内容:
<base href="/series/dynamics/testurl/" />
这样每个 亲戚 URL 都是从那个基础 URL 解析的,而不是从当前页面的 URL.