1

我已经尝试了所有我可能无济于事,检查了所有关于 url.htaccess重写的 web 教程,没有一个专门解决我的所有问题,我的编程专家帮助我解决这个问题,我有一个 php web 应用程序,我只有管理 url 的 .htaccess 代码没有 .php 扩展名,比如localhost/app/images.php,链接是localhost/app/images,一旦你点击它,.htaccess 就会理解/images/images.php获取文档,但是当我尝试添加更多 .htaccess 代码来重写一些动态链接时,比如/images/miscellaneous正确的链接应该在哪里

/images.php?album_id=miscellaneous

我明白了

internal server error

这是我现在拥有的 .htaccess 代码,它只匹配 /images 到 /images.php

# Turn on URL rewriting
RewriteEngine on
RewriteBase /ansjc
# Remove file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]
RewriteRule images/album_id/(.*)/ images.php?album_id=$1
RewriteRule images/album_id/(.*) images.php?album_id=$1 
4

2 回答 2

1

您的重写规则有两个主要问题:

  • 它们的顺序很重要。现在,你的第二个和第三个永远不会匹配的东西
  • 其中两个可以简化为一个。

考虑使用这个:

 RewriteEngine on
 RewriteBase /ansjc
 # Remove file extension
 RewriteRule images/album_id/(.+)/?$ images.php?album_id=$1 [L]
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule (.+) $1.php [L]

[L] 标志表示“最后一个”。换句话说,如果匹配,则不会在重写方面进行任何其他处理。因此,如果 images/album_id/etc/ 匹配,第二个重写规则将不会干扰。

这也解决了将 .php 附加到所有内容的问题。尽管我怀疑您的 500 可能来自您的代码,而不是来自重写。

于 2013-05-23T18:32:27.347 回答
0

使用此代码

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^/]*)$ $1.php [NC,L]
RewriteRule ^images/(.*)$ images.php?album_id=$1 [L]

并尝试

http://localhost/images
http://localhost/images/
http://localhost/images/album_id

它将调用 images.php 和 images.php 内部只是 print_r($_GET); 去测试。

于 2013-05-23T18:48:46.340 回答