多个 .php 页面的变量重写
Variable Rewrite for multiple .php pages
我正在尝试访问我的两个页面并使用 .htaccess 重写它们的 URL。
我尝试访问的第一页:
我正在尝试访问的第二页:
我当前的 .htaccess 代码:
# Apache Rewrite Rules
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Add trailing slash to url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ / [R=301,L]
# Remove .php-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ polls.php?username= [NC,L]
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ getpoll.php?poll= [NC,L]
RewriteRule ^([^\.]+)/$ .php
# Remove .html-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^\.]+)/$ .html
# End of Apache Rewrite Rules
</IfModule>
第一页作为 /polls/username 但第二页不读取轮询值,我认为重定向到 polls.php。
谁能解释一下我做错了什么?
提前致谢
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^[A-Za-z0-9-]+/([0-9-]+)/?$ getpoll.php?poll= [NC,L]
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ polls.php?username= [NC,L]
在这里,我已经交换了你的两个规则,所以我们首先检查 ID(对于 getpoll
- 请注意我是如何从表达式中删除字母的)。如果我们不进行 ID 检查(即段中有字母),那么它将重写为 polls
.
更新:
根据 arco444,如果用户名是数字,这将不起作用。这是一个更具体的解决方案:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^getpoll/([0-9-]+)/?$ getpoll.php?poll= [NC,L]
RewriteRule ^polls/([A-Za-z0-9-]+)/?$ polls.php?username= [NC,L]
我正在尝试访问我的两个页面并使用 .htaccess 重写它们的 URL。
我尝试访问的第一页:
我正在尝试访问的第二页:
我当前的 .htaccess 代码:
# Apache Rewrite Rules
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Add trailing slash to url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ / [R=301,L]
# Remove .php-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ polls.php?username= [NC,L]
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ getpoll.php?poll= [NC,L]
RewriteRule ^([^\.]+)/$ .php
# Remove .html-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^\.]+)/$ .html
# End of Apache Rewrite Rules
</IfModule>
第一页作为 /polls/username 但第二页不读取轮询值,我认为重定向到 polls.php。
谁能解释一下我做错了什么?
提前致谢
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^[A-Za-z0-9-]+/([0-9-]+)/?$ getpoll.php?poll= [NC,L]
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ polls.php?username= [NC,L]
在这里,我已经交换了你的两个规则,所以我们首先检查 ID(对于 getpoll
- 请注意我是如何从表达式中删除字母的)。如果我们不进行 ID 检查(即段中有字母),那么它将重写为 polls
.
更新:
根据 arco444,如果用户名是数字,这将不起作用。这是一个更具体的解决方案:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^getpoll/([0-9-]+)/?$ getpoll.php?poll= [NC,L]
RewriteRule ^polls/([A-Za-z0-9-]+)/?$ polls.php?username= [NC,L]