如何使用.htaccess中的正确重定向在PHP中创建干净的URL?

时间:2018-10-08 15:37:42

标签: php .htaccess

我已经剪切并粘贴了很多.htaccess文件,但我的手指却变成了蓝色。我尝试的最后几个解决方案将所有链接重定向到index.php,但我不希望这样做。由于我不太了解自己在做什么,所以我不知道该如何解决。我是网页设计师,而不是程序员,但我更喜欢干净的网址。因此,我需要执行以下操作:

  1. 将www和http重定向到https;
  2. 使所有URL都无扩展名,且不加斜杠;
  3. 将每个.php和斜杠重定向到干净的URL-我有多个PHP文件,因此我需要一个通配符解决方案,而不是一个特定页面的解决方案;
  4. 我还在两个不同的页面(view.php和edit.php)上显示从数据库中提取的数据。我希望该URL看起来像view / 1和edit / 1,而不是view.php?id = 1和edit.php?id = 1。

我当前的.htaccess如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

我的主机提供免费的SSL,并告诉我放置上面的代码以将www和http重定向到https,所以我认为我已经设置为#1。现在,我需要弄清楚如何实现/集成#2,#3和#4。

我在How can I make all my urls extensionless, without trailing slash. And redirect the .php and trailing slash to none?How to redirect all my urls with no extension to end with .php以及其他许多地方都尝试过解决方案,但是没有任何东西可以满足我的需求。

1 个答案:

答案 0 :(得分:1)

我花了10个小时,稍作休息,但我想我已经知道了。到目前为止,它似乎肯定可以正常工作。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^account/content$ content.php [NC,L]
RewriteRule ^account/email-reset$ email-reset.php [NC,L]
RewriteRule ^account/pwd-reset$ pwd-reset.php [NC,L]
RewriteRule ^view/(\d+)$ view.php?qdetailsid=$1 [NC,L]
RewriteRule ^edit/(\d+)$ edit.php?qdetailsid=$1 [NC,L]
RewriteRule ^delete/(\d+)$ delete.php?qdetailsid=$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) $1.php [NC,L]
</IfModule>