【发布时间】:2018-02-18 18:08:01
【问题描述】:
嗨,我有一个网站,我在其中使用某些规则使 URL SEO 友好。这是代码:
Options +FollowSymLinks
Options -Multiviews
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* ? [F,L]
RewriteRule ^([a-zA-Z0-9_-\s]+)/([a-zA-Z0-9_-\s]+)/([0-9]+)/([a-zA-Z0-9_-\s]+)$ /page1.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-\s]+)/([a-zA-Z0-9_-\s]+)/([a-zA-Z0-9_-\s]+)$ /page2.php?var1=$1&var2=$2&var3=$3 [L]
RewriteRule ^([a-zA-Z0-9_-\s]+)/([a-zA-Z0-9_-\s]+)$ /page2.php?var1=$1&var2=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-\s]+)$ /page2.php?var1=$1 [L,QSA]
# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$ /$1 [R=301,L]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
ErrorDocument 404 /404.php
在某些情况下它可以正常工作,但在某些情况下会显示一些错误。
我遇到的错误:
1) 假设我有一个 page3.php,当我访问 www.example.com/page3.php 时,它会显示 page3 的内容而不删除扩展名来自 URL 但当我输入 www.example.com/page3 时,它会将 page3 作为变量并显示 page2 的内容,因为我已经描述了重写规则page2 的单个变量。
2) 如果我将我的 URL 写为 www.example.com/var1/ 它会将 URL 重写为 www.example.com/var1/.php 但如果我将其写为 www.example.com/var1/var2/ 它工作正常,即删除斜杠。
正如在错误 1 中提到的,首先我想将我的 .php 页面重定向到 without php,其次如果在我的 URL www.example.com/page3 page3 是我的根目录中的一个文件,它显示 page3 的内容,如果 page3 不是我的根目录中的文件,那么它应该将 page3 作为一个变量,它应该像上面提到的重写规则一样工作 em>。
对于错误 2,我想从 URL 中删除尾部斜杠,无论它有 1 个变量还是 2 个或 3 个或 4 个变量。
请帮帮我...提前谢谢...
注意:我在 HTTPS 而不是 HTTP 上运行我的网站。
【问题讨论】:
标签: php apache .htaccess mod-rewrite url-rewriting