mod_rewrite convert: XXX-YYY to XXX.php?sub1=YYY


mod_rewrite convert: XXX-YYY to XXX.php?sub1=YYY

我正在使用 ubuntu LAMP,我正在尝试使用 mod_rewrite 来转换网址,例如:

  • 站点/XXX 到站点/XXX.php 和
  • 站点/XXX-YYY 到站点/XXX.php?sub1=YYY

我使用了这个重写规则:

RewriteRule ^([a-zA-Z0-9]+)$ ./$1.php
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2

在我的 OSX 本地,它们工作正常,无论如何,当在 ubuntu 服务器上上传 .htaccess 时,调用站点/测试我无法访问站点/测试.php但我得到 404。Mod_rewrite工作,实际上 404 页面设置在同一个 .htaccess 中并且可以工作。在本地,我在文件夹中使用了它:本地主机/我的文件夹/....在远程中,我正在使用子域的根:app.sitename.com/....

有人可以帮助我吗?

这是完整的代码:

RewriteEngine On
RewriteRule ^altro&(.+)? ./altro.php?$1 [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)$ ./$1.php [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2&sub2=$3
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2&sub2=$3&sub3=$4
RewriteRule ^([a-z]+)-([a-z]+)-([0-9]+)-([a-zA-Z0-9_]+).([a-zA-Z]+)$ ./server/php/files/$1/$2/$3/$4.$5

第一个指令正在起作用!事实上 site/altro&code 打开 altro.php?code

也许这有助于调试:

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

来源:如何调试 Apache mod_rewrite

(你不能把它放在.htaccess中。您必须将其放入虚拟主机配置中。

你能试试这段代码吗:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+)/?$ $1.php [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)/?$ $1.php?sub1=$2 [L,QSA]

完整的 .htaccess 代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteRule ^altro&(.+) altro.php?$1 [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)$ $1.php [L]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2&sub2=$3 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2&sub2=$3&sub3=$4 [L,QSA]
RewriteRule ^([a-z]+)-([a-z]+)-([0-9]+)-([a-zA-Z0-9_]+).([a-zA-Z]+)$ server/php/files/$1/$2/$3/$4.$5 [L,QSA]